﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using IView.DiaryAndTracking;
using Presenter.DiaryAndTracking;
using System.Windows.Forms.DataVisualization.Charting;
using DataTransferObject.DiaryAndTrackingTask.SupportClassForUpdateTask;


namespace JSKE.DiaryAndTracking
{
    public partial class TaskReport : FormLang, ITaskReportForm
    {
        private PresenterTaskReportForm _presenter;
        private DateTime from = DateTime.Now.AddDays(-7).Date;
        private DateTime to = DateTime.Now.AddDays(1).Date;
        public TaskReport()
        {
            //InitializeComponent();
            _presenter = new PresenterTaskReportForm(this, DATA_MODE);
            dtpkFrom.Value = from;
            dtpkTo.Value = to;
            toggleDTPK(false);
            drawChart();
        }

        #region ITaskReportForm
        public void drawTaskBurndown(List<JskeSerie> series)
        {
            if (series.Count == 0)
            {
                MessageBox.Show("There are no burndown data to be drawn", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                lineCurvesChartType1.binData2Chart(series, true);
            }
        }

        public void drawPieChart(List<PiechartItem> data)
        {
            if (data.Count == 0)
            {
                MessageBox.Show("There are no task data to be drawn", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                jSkePieChart1.setData(data);
            }
        }

        public void setHeaderText(string headerText)
        {
            jSkePieChart1.setPriorityHeaderText(headerText);
        }

        public void setChart3DStyle(Boolean value)
        {
            jSkePieChart1.setChart3DStyle(value);
        }
        public void setChartPercentLengendtxt(Boolean value)
        {
            jSkePieChart1.setChartLablePercentLegendtxt(value);
        }

        public void setTransparency3D(Boolean value)
        {
            jSkePieChart1.setTransperency3D(value);
        }
        #endregion

        private void toggleDTPK(Boolean target)
        {
            btnDrawBDGraph.Enabled = target;
            dtpkFrom.Enabled = target;
            dtpkTo.Enabled = target;
        }
        private void rdbPieChart_CheckedChanged(object sender, EventArgs e)
        {
            toggleDTPK(false);
            drawChart();

        }
        private void rdbBurndown_CheckedChanged(object sender, EventArgs e)
        {
            toggleDTPK(true);
        }

        private void drawChart()
        {
            if (rdbPieChart.Checked)
            {
                jSkePieChart1.Show();
                lineCurvesChartType1.Hide();
                _presenter.drawPieChart();
                jSkePieChart1.setMessage(
                    "Việc này có quan trọng không?\r\n" +
"Có cần làm ngay không?\r\n" +
"Có cần đích thân mình phải làm làm không?\r\n\r\n" + "1. Liệt kê các công việc vào buổi sáng hằng ngày.\r\n\r\n" +

 "Liệt kê các công việc cần làm trong ngày ra một tờ giấy hoặc trên máy vi tính cũng được. Lưu ý chỉ cần liệt kê ra và chưa vội sắp xếp vội vì nếu như thế thì chúng sẽ rất bị rối trong việc nên làm việc gì và không nên làm việc gì. Não chúng ta không thể làm một lúc nhiều việc được.\r\n\r\n" +

"2. Xác định ưu tiên.\r\n\r\n" +

"Sắp xếp thời gian mỗi ngày để giải quyết các công việc ưu tiên và cũng cần linh hoạt dành đủ thời gian cho những việc bất ngờ xảy ra. Hãy học cách nói “không” với những việc không phải là ưu tiên.r\nr\n" +

"3. Xác định khoảng thời gian cho mỗi công việc.\r\n\r\n" +

 "Chúng ta nên xác định khoảng thời gian cho mỗi công việc và thời gian bắt đầu, kết thúc. Và một điều rất quan trọng là các bạn sẽ thắc mắc là trong khi thực hiện công việc này lại bị công việc khác quan trọng hơn xen vào thì làm thế nào? Theo nghiên cứu chúng ta nên trừ khoảng thời gian 20% để dự phòng. Đừng quên những việc nhỏ, nhưng tập trung chúng lại. Chớ để cho các việc nhỏ trôi đi, tốt nhất là dành 30 phút mỗi ngày cho các công việc này. Nhưng đừng để phải mất công nhiều lần chạy đi chạy lại ra máy photocopy, và dành các cuộc điện thoại để một lần nhấc máy gọi luôn thể. Hãy tách thời gian ra những khoảng thời gian nhỏ để tận dụng tối đa nó.\r\n\r\n" +

"4. Tập cho mình tính kỷ luật, và thói quen.\r\n\r\n" +

"Thay vì thường xuyên kéo lê cả đống việc, cần xác định hạn chót để hoàn thành từng công việc. Một mẹo nhỏ là nếu cần hoàn tất một việc vào 5h chiều thứ Năm thì hãy bắt mình kết thúc vào lúc 12h trưa. Nên giải quyết các việc khó trước, sau đó tha hồ... dạo chơi. Cuối cùng chúng nên tập cho mình thói quen làm việc chăm chỉ và có kế hoạch trước đó chính là dấu hiệu của người thành đạt!\r\n\r\n");
            }
            else if (rdbTaskPriority.Checked)
            {
                jSkePieChart1.Show();
                lineCurvesChartType1.Hide();
                _presenter.drawPriorityChart("Priority");
                jSkePieChart1.setMessage("Những người quản lý thời gian hiệu quả sẽ có tư duy rành mạch hơn, rõ ràng hơn, họ là những người sáng tạo hơn và làm việc tốt hơn. Chắc chắn như thế! Và rõ ràng là họ sẽ có nhiều thời gian hơn để đào sâu nghiên cứu những vấn đề chuyên ngành, hay đơn giản là làm những công việc riêng.\r\n\r\n" +

"Thay đổi thói quen bây giờ cũng chưa muộn. Và cũng chẳng khó khăn gì. Dưới đây là vài điểm để tham khảo:\r\n\r\n" +

"1) Làm việc một cách có tổ chức:\r\n\r\n" +

"Sắp đặt bàn làm việc gọn gàng với hệ thống hồ sơ, tài liệu riêng khoa học, có lịch công tác chính cho cả khoảng thời gian dài với các công việc cụ thể hàng ngày , và đừng quên một cái... sọt rác ở bên cạnh. Có thể sử dụng một số chương trình trong máy tính để quản lý công việc, sành điệu một tý thì chơi PDA gắn theo người (điện thoại di động thì không ghi đủ). Dọn sạch bàn làm việc mỗi ngày bằng cách ghi lại các nhiệm vụ phải làm sắp tới (cùng các thông tin quan trọng) vào lịch biểu trong máy tính. Đánh dấu những công việc ưu tiên hoặc vứt bỏ những giấy tờ không cần dùng. Có thể ghi chú thêm thông tin trên những sticker nhỏ dán trước mặt nhưng nhớ là các mẩu giấy này ngoài việc khiến cho bàn làm việc trông không đẹp mắt còn có thể bị bay đi mất.\r\n\r\n" +

"2) Lên kế hoạch trước:\r\n\r\n" +

"Để đến đầu giờ sáng mới lên kế hoạch trong ngày là quá muộn. Hãy sắp xếp việc thật cụ thể từ chiều hôm trước. Hãy tách riêng các công việc và xác định rõ việc nào nên làm ngay hôm sau, việc nào nên làm trước trong tuần này, việc nào có thể để lại. Đương nhiên, danh sách các công việc có thể thay đổi hàng ngày vì phát sinh thêm việc mới.\r\n\r\n" +

"3) Xác định ưu tiên:\r\n\r\n" +

"Sắp xếp thời gian mỗi ngày để giải quyết các công việc ưu tiên và cũng cần linh hoạt dành đủ thời gian cho những việc bất ngờ xảy ra. Hãy học cách nói “không” với những việc không phải là ưu tiên.\r\n\r\n" +

"4) Biết rõ khi nào mình làm việc hiệu quả nhất:\r\n\r\n" +

"Nếu thấy mình làm việc vào buổi sáng là hiệu quả nhất, tại sao lại không đưa những công việc quan trọng vào buổi sáng? Những thời gian không phải là “đỉnh” thì dành để làm những công việc mang tính chất thường nhật, kém hấp dẫn hơn. Cũng có người thấy họ chỉ viết lách hiệu quả trong không gian yên tĩnh vào lúc... nửa đêm. Cũng không phải thói quen xấu nhưng sẽ bất lợi vì nếu muốn hỏi han, điện thoại thì chỉ có cách chờ đến sáng hôm sau.\r\n\r\n" +

"5) Đừng quên những việc nhỏ, nhưng tập trung chúng lại:\r\n\r\n" +

"Chớ để cho các việc nhỏ trôi đi, tốt nhất là dành 30 phút mỗi ngày cho các công việc này. Nhưng đừng để phải mất công nhiều lần chạy đi chạy lại ra máy photocopy, và dành các cuộc điện thoại để một lần nhấc máy gọi luôn thể.\r\n\r\n" +

"6) Chia nhỏ:\r\n\r\n" +

"Quản lý các dự án lớn bằng cách chia thành các phần nhỏ và dễ quản lý hơn. Không ai dám tự nhận mình là “chuyên gia giải quyết chuyện lớn” và cũng không có người nào thuộc loại chỉ để làm chuyện nhỏ. Đừng choáng ngợp trước những dự án đồ sộ, hãy tách thành các tiểu dự án và sẽ thấy công việc đơn giản hơn.\r\n\r\n" +

"7) Tập cho mình tính kỷ luật:\r\n\r\n" +

"Thay vì thường xuyên kéo lê cả đống việc, cần xác định hạn chót để hoàn thành từng công việc. Một mẹo nhỏ là nếu cần hoàn tất một việc vào 5h chiều thứ Năm thì hãy bắt mình kết thúc vào lúc 12h trưa. Nên giải quyết các việc khó trước, sau đó tha hồ... dạo chơi.\r\n\r\n" +

"8) Vất vả khi cần thiết, về sớm khi hết việc:\r\n\r\n" +

"Làm việc hì hục quanh năm ngày tháng không có gì đáng khen. Khi công việc quá nhiều thì có thể làm việc thâu đêm nhưng nếu thấy mình đã thực sự hoàn tất công việc thì cứ “thiên nhiên” mà đi về sớm một chút. Về sớm khi đã hết việc không phải là lỗi.\r\n\r\n");
            }
            else if (rdbBurndown.Checked)
            {
                jSkePieChart1.Hide();
                lineCurvesChartType1.Show();
                _presenter.drawTaskBurndown(from, to);
            }

        }

        private void dtpkFrom_ValueChanged(object sender, EventArgs e)
        {
            from = dtpkFrom.Value.Date;
        }

        private void dtpkTo_ValueChanged(object sender, EventArgs e)
        {
            to = dtpkTo.Value.Date;
        }

        private void rdbTaskPriority_CheckedChanged(object sender, EventArgs e)
        {
            toggleDTPK(false);
            drawChart();
        }

        private void btnDrawBDGraph_Click(object sender, EventArgs e)
        {
            if (from > to)
            {
                MessageBox.Show("Invalid time", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                _presenter.drawTaskBurndown(from, to);
            }
        }



    }
}
